package persistencia;

import java.util.Vector;
import negocio.Proprietario;
import negocio.ImobiliariaException;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ListaPropDAO  extends BaseDAO {
		
	        private PreparedStatement stIncluir;
	        private PreparedStatement stConsultaNome;
	        private PreparedStatement stConsultaDataNasc;
	        private PreparedStatement stConsultaCpf;
	        private PreparedStatement stListaNome;
	        private PreparedStatement stAlterar;

	        public ListaPropDAO() throws ImobiliariaException {
	            super();
	            Connection conect = getConexao();
	            try {
	                stIncluir = conect.prepareStatement("INSERT INTO proprietario (nome, datanasc, endereco, cpfprop, telefone, rg, email, estadocivil, renda) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ? )");
	                stConsultaNome = conect.prepareStatement("SELECT * FROM proprietario WHERE nome LIKE %?%");
	                stConsultaDataNasc = conect.prepareStatement("SELECT * FROM proprietario WHERE datanasc = ?");
	                stConsultaCpf = conect.prepareStatement("SELECT * FROM proprietario WHERE cpfprop = ?");
	                stListaNome = conect.prepareStatement("SELECT * FROM proprietario ORDER BY nome");
	                stAlterar = conect.prepareStatement("UPDATE proprietario SET nome=?, datanasc=?, endereco=?, cpfprop=?, telefone=?, rg=?, email=?, estadocivil=?,renda=? WHERE cpfprop = ?");
	            } catch(SQLException e) {
	                throw new ImobiliariaException("Nao foi possivel criar as consultas dos proprietario: " + e.getMessage());
	            }
	        }

		public void incluir(Proprietario p) throws ImobiliariaException {
			try {
	             stIncluir.setString(1, p.getNome());
	             stIncluir.setString(2, p.getDataNasc());
	             stIncluir.setString(3, p.getEndereco());
	             stIncluir.setString(4, p.getCpf());
	             stIncluir.setString(5, p.getTelefone());
	             stIncluir.setString(6, p.getRg());
	             stIncluir.setString(7, p.getEmail());
	             stIncluir.setString(8, p.getEstadoCivil());
	             stIncluir.executeUpdate();
	               } catch(SQLException e) {
	                   throw new ImobiliariaException("Erro ao incluir novo proprietario: " + e.getMessage());
	               }
	               
	              System.out.println(p);
		} 

		public Proprietario[] consultaPorNome(String nome) throws ImobiliariaException {
					
				Vector v = new Vector();
			try {
	             stConsultaNome.setString(1, nome);
	             ResultSet rs = stConsultaNome.executeQuery();
	             	while(rs.next()) {
	             		Proprietario p = new Proprietario();
	                      p.setNome(rs.getString("nome"));
	                      p.setDataNasc(rs.getString("datanasc"));
	                      p.setEndereco(rs.getString("endereco"));
	                      p.setCpf(rs.getString("cpfprop"));
	                      p.setTelefone(rs.getString("telefone"));
	                      p.setRg(rs.getString("rg"));
	                      p.setEmail(rs.getString("email"));
	                      p.setEstadoCivil(rs.getString("estadocivil"));
	                      v.add(p);
	                     }
			} catch(SQLException e) {
				throw new ImobiliariaException("Erro ao executar consulta de proprietario por nome: " + e.getMessage());
			}
		
			return (Proprietario[]) v.toArray(new Proprietario[0]);
		}
		
		
		public Proprietario consultaDataNasc(String dataNasc) throws ImobiliariaException {
			try {
	             stConsultaDataNasc.setString(1, dataNasc);
	             ResultSet rs = stConsultaDataNasc.executeQuery();
	             	while(rs.next()) {

	             		Proprietario p = new Proprietario();
	                      p.setNome(rs.getString("nome"));
	                      p.setDataNasc(rs.getString("datanasc"));
	                      p.setEndereco(rs.getString("endereco"));
	                      p.setCpf(rs.getString("cpfprop"));
	                      p.setTelefone(rs.getString("telefone"));
	                      p.setRg(rs.getString("rg"));
	                      p.setEmail(rs.getString("email"));
	                      p.setEstadoCivil(rs.getString("estadocivil"));
	                      return p;
	                        }
			} catch(SQLException e) {
				throw new ImobiliariaException("Erro ao executar consulta de proprietario por data de nascimento: " + e.getMessage());
			}
		
			return null;
		} 
		
		
		public Proprietario consultaPorCpf(String nome) throws ImobiliariaException {
			try {
	             stConsultaCpf.setString(1, nome);
	             ResultSet rs = stConsultaCpf.executeQuery();
	             	while(rs.next()) {
	             		Proprietario p = new Proprietario();
	                      p.setNome(rs.getString("nome"));
	                      p.setDataNasc(rs.getString("datanasc"));
	                      p.setEndereco(rs.getString("endereco"));
	                      p.setCpf(rs.getString("cpfprop"));
	                      p.setTelefone(rs.getString("telefone"));
	                      p.setRg(rs.getString("rg"));
	                      p.setEmail(rs.getString("email"));
	                      p.setEstadoCivil(rs.getString("estadocivil"));
	                      return p;
	                    }
			} catch(SQLException e) {
				throw new ImobiliariaException("Erro ao executar consulta de proprietario por CPF: " + e.getMessage());
			}
		
			return null;
		}
		

		public Proprietario[] listaNome() throws ImobiliariaException {
			Vector<Proprietario> result = new Vector<Proprietario>();
			try {
	             ResultSet rs = stListaNome.executeQuery();
	             	while(rs.next()) {
	             		Proprietario p = new Proprietario();
	                      p.setNome(rs.getString("nome"));
	                      p.setDataNasc(rs.getString("datanasc"));
	                      p.setEndereco(rs.getString("endereco"));
	                      p.setCpf(rs.getString("cpfcliente"));
	                      p.setTelefone(rs.getString("telefone"));
	                      p.setRg(rs.getString("rg"));
	                      p.setEmail(rs.getString("email"));
	                      p.setEstadoCivil(rs.getString("estadocivil"));
	                      result.add(p);
	                    }
			} catch(SQLException e) {
				throw new ImobiliariaException("Erro ao consultar proprietario cadastrados: " + e.getMessage());
			}
			
			return result.toArray(new Proprietario[0]);
		}
		
		
		public void alterar(Proprietario p) throws ImobiliariaException {
			try {
				stAlterar.setString(1, p.getNome());
				stAlterar.setString(2, p.getDataNasc());
				stAlterar.setString(3, p.getEndereco());
				stAlterar.setString(4, p.getCpf());
				stAlterar.setString(5, p.getTelefone());
				stAlterar.setString(6, p.getRg());
				stAlterar.setString(7, p.getEmail());
				stAlterar.setString(8, p.getEstadoCivil());
	            stAlterar.executeUpdate();
	            
			} catch(SQLException e) {
				throw new ImobiliariaException("Erro ao alterar dados do proprietario: " + e.getMessage());
			} 		
		}



		}


